package com.ks.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Random;

public class StringUtil {
	public static void main(String[] args) {
		String[] array = { "a", "1", "b" };
		System.out.println(Arrays.toString(array));
		System.out.println(StringUtil.join(array, ","));
		System.out.println(StringUtil.joinQuote(array));
	}

	/**
	 * 使用单引号引用数组中的每个字符串，并使用逗号连接成单个字符串。如果子项为空，则排除该项。
	 * 
	 * @param strings 需要连接的字符串数组。
	 * @return 连接后的字符串。
	 */
	public static String joinQuote(String[] strings) {
		return StringUtil.concat("'", join(strings, "','"), "'");
	}

	/**
	 * * 连接多个字符串为单个字符串。
	 * 
	 * @param string 多个字符串列表。
	 * @return 多个字符串连接起来的单个字符串。
	 */
	public static String concat(String... string) {
		int length = 0;
		// 计算StringBuilder初始容量
		for (String str : string) {
			length += str.length();
		}
		StringBuilder buf = new StringBuilder(length);
		for (String str : string) {
			buf.append(str);
		}
		return buf.toString();
	}

	/**
	 * 连接数组中的每个字符串，并以指定分隔符分隔。如果子项为空，则排除该项。
	 * 
	 * @param strings  需要连接的字符串数组。
	 * @param splitter 分隔字符串。
	 * @return 连接后的字符串。
	 */
	public static String join(String[] strings, String splitter) {
		StringBuilder buf = new StringBuilder();
		boolean added = false;

		for (String s : strings) {
			if (StringUtil.isEmpty(s)) {
				continue;
			}
			if (added) {
				buf.append(splitter);
			} else {
				added = true;
			}
			buf.append(s);
		}
		return buf.toString();
	}

	/**
	 * 判断指定的字符串是否为空，空串是指值为null或长度为0。
	 * 
	 * @param string 需要判断的字符串。
	 * @return true为空，false非空。
	 */
	public static boolean isEmpty(String string) {
		return string == null || string.length() == 0;
	}

	/**
	 * 获取随机字符串，可用于加密 添加字符，增加保密度
	 */
	private static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

	/**
	 * 获取任意位的随机字符串(0-9 a-z A-Z)
	 * 
	 * @param size 位数
	 * @return
	 */
	public static final String getRandomNum(int size) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for (int i = 0; i < size; i++) {
			sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
		}
		return sb.toString();
	}

	/**
	 * md5加密(ITS)
	 * 
	 * @param str
	 * @param charSet
	 * @return
	 */
	public synchronized static final String getMD5Str(String str, String charSet) { // md5加密
		MessageDigest messageDigest = null;
		try {
			messageDigest = MessageDigest.getInstance("MD5");
			messageDigest.reset();
			if (charSet == null) {
				messageDigest.update(str.getBytes());
			} else {
				messageDigest.update(str.getBytes(charSet));
			}
		} catch (NoSuchAlgorithmException e) {

		} catch (UnsupportedEncodingException e) {

		}

		byte[] byteArray = messageDigest.digest();
		StringBuffer md5StrBuff = new StringBuffer();
		for (int i = 0; i < byteArray.length; i++) {
			if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
				md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
			else
				md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
		}
		return md5StrBuff.toString();
	}

}
